package com.itheima.io.encoding.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo01 {

    public static void main(String[] args) throws IOException {

        /**
         * 需求：就是使用FileInputStream读取a.txt文件中的数据
         */
        // 1. 创建一个FileInputStream对象
        FileInputStream fileInputStream = new FileInputStream("itheima-io-encoding\\a.txt") ;

        // 2. 读取数据(一次读取一个字节)
        int by = fileInputStream.read() ;
        System.out.println((char)by);

        /**
         * 我们都知道一个中文占用多个字节，而我们此时在使用字节流进行数据读取的时候一次读取一个字节，相当于一次读取一个中文的一部分
         * 而我们此时需要把这一部分转换成对应的字符，由于数据读取不全，导致转换出现问题。
         *
         * 一个中文汉字到底占用几个字节呢？
         *
         * 字符就是仅仅是字符的一组集合，并不涉及到字符在计算机中的存储方式。那么计算机中对字符的存储到底是怎么完成的呢？
         * 计算机底层所存储的数据都是二进制数据，那么要完成指定字符到计算机中的存储，我们就需要去建立字符和计算机二进制数据的对应
         * 关系表；这张表我们常常将其称之为字符编码表(又由于计算机的二进制数据在我们的日常生活中使用起来并不是很方便，因此这张表的
         * 二进制数据最终是以十进制数据进行体现的)；并且一个字符集可以对应多个字符编码表
         *
         * 常见的字符集
         *
         *  ASCII
         *
         *      ascii编码表   'a' ---> 97 , '0' ---> 48 , 'A' ----> 65
         *
         *  GK系列的字符集
         *
         *      GB2312 , GBK(在GBK这个编码表中一个中文占用两个字节)
         *
         *   Unicode
         *
         *      UTF-8(在UTF-8这个编码表中一个中文占用三个字节)
         *
         *   后期所出现的这些字符编码表都是兼容ascii编码表的； 兼容指的意思就是ascii编码表中定义的字符和计算机二进制数据的对应关系
         *   在后期的这个编码表没有发生改变
         *
         */

        // 3. 释放资源
        fileInputStream.close();

    }

}
